package com.liezh.factory.method;

import com.liezh.factory.IRuleConfigParser;
import com.liezh.factory.RuleConfig;
import com.liezh.factory.simple.RuleConfigParserFactory;

import java.util.HashMap;
import java.util.Map;

/**
 * @author liezh
 * @date 2022-5-6
 */
public class RuleConfigSource {

    private static Map<String, IRuleConfigParserFactory> parserFactoryMap = new HashMap<>();

    static {
        parserFactoryMap.put("json", new JsonRuleConfigParserFactory());
        parserFactoryMap.put("xml", new XmlRuleConfigParserFactory());
        final YmlRuleConfigParserFactory ymlRuleConfigParserFactory = new YmlRuleConfigParserFactory();
        parserFactoryMap.put("yml", ymlRuleConfigParserFactory);
        parserFactoryMap.put("yaml", ymlRuleConfigParserFactory);
    }

    public RuleConfigSource() {
    }

    public RuleConfig load(String configFilePath) {
        String ruleConfigFileExtension = getFileExtension(configFilePath);
        // 简单工厂创建
        final IRuleConfigParserFactory parserFactory = parserFactoryMap.get(ruleConfigFileExtension);
        final IRuleConfigParser parser = parserFactory.createParser();
        String configContent = getFileContent(configFilePath);
        return parser.parse(configContent);
    }

    private String getFileContent(String configFilePath) {
        // mock
        return "{\"a\": 1, \"b\": 2}";
    }

    private String getFileExtension(String configFilePath) {
        // mock
        return "json";
    }
}
